package com.my.ddd_sample_collections.aggregate_change_tracking.repository_framework;

import java.util.Set;

public interface ChangeTracker {
    /**
     * 跟踪标记属性的变更状态
     */
    void track(DomainObject parent, Object thisValue, String propertyName, Object toValue);
    
    void trackRemoveItem(DomainObject parent, String propertyName, DomainObject toRemove);
    /**
     * 判断字段属性（简单属性，即：不是子实体）是否有变更记录（即：被改过）
     * @param fieldName
     * @return
     */
    boolean isTrackingField(String fieldName);
    Set<String> getChangedFields();
    void clearTracking();
    
    /**
     * 判断子实体是否被删除
     */
    boolean isDeleted(DomainObject parent, String entityPropertyName);

}
